package controller;

import bo.AcaoGrupoBO;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import model.AcaoGrupo;
import util.ConsUtil;
import util.CustomException;
import util.FacesUtil;

@ManagedBean(name = "acaoGrupoController")
@ViewScoped
public class AcaoGrupoController implements Serializable {

    private AcaoGrupoBO acaoGrupoBO = new AcaoGrupoBO();
    private ConsUtil.Operacao operacao;
    private List<AcaoGrupo> acoes;
    private List<AcaoGrupo> acoesFiltrados;
    private AcaoGrupo acaoGrupoSelecionado = new AcaoGrupo();

    public AcaoGrupoController() {
        try {
            this.acoes = acaoGrupoBO.selecionarTodos();
            this.operacao = ConsUtil.Operacao.CONSULTAR;
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void novo() {
        setAcaoGrupoSelecionado(new AcaoGrupo());
        getAcaoGrupoSelecionado().setAgrAtivo(Boolean.TRUE);
        setOperacao(ConsUtil.Operacao.NOVO);
    }

    public void alterar() {
        try {
            Long agrCodigo = Long.valueOf(FacesUtil.getRequestParameterMap("agrCodigo"));
            setAcaoGrupoSelecionado(acaoGrupoBO.selecionarPorId(agrCodigo));
            setOperacao(ConsUtil.Operacao.ALTERAR);
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void excluir() {
        try {
            Long agrCodigo = Long.valueOf(FacesUtil.getRequestParameterMap("agrCodigo"));
            setAcaoGrupoSelecionado(acaoGrupoBO.selecionarPorId(agrCodigo));
            setOperacao(ConsUtil.Operacao.EXCLUIR);
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void salvar() {
        try {
            acaoGrupoBO.salvar(acaoGrupoSelecionado);
            setAcoes(acaoGrupoBO.selecionarTodos());
            setOperacao(ConsUtil.Operacao.CONSULTAR);
            FacesUtil.exibirMsgInfo(null, "Concluído", "Grupo de ações salvo com sucesso!");
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void confirmarExclusao() {
        try {
            if (acaoGrupoBO.possuiAcoes(acaoGrupoSelecionado.getAgrCodigo())) {
                FacesUtil.exibirMsgWarn(null, "Atenção!", "Este grupo possui ações e não pode ser excluído.");
            } else {
                acaoGrupoBO.excluir(acaoGrupoSelecionado);
                setAcoes(acaoGrupoBO.selecionarTodos());
                setOperacao(ConsUtil.Operacao.CONSULTAR);
                FacesUtil.exibirMsgInfo(null, "Concluído", "Grupo de ações excluído com sucesso!");
            }
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public ConsUtil.Operacao getOperacao() {
        return operacao;
    }

    public void setOperacao(ConsUtil.Operacao operacao) {
        this.operacao = operacao;
    }

    public List<AcaoGrupo> getAcoes() {
        return acoes;
    }

    public void setAcoes(List<AcaoGrupo> acoes) {
        this.acoes = acoes;
    }

    public AcaoGrupo getAcaoGrupoSelecionado() {
        return acaoGrupoSelecionado;
    }

    public void setAcaoGrupoSelecionado(AcaoGrupo acaoGrupoSelecionado) {
        this.acaoGrupoSelecionado = acaoGrupoSelecionado;
    }

    public List<AcaoGrupo> getAcoesFiltrados() {
        return acoesFiltrados;
    }

    public void setAcoesFiltrados(List<AcaoGrupo> acoesFiltrados) {
        this.acoesFiltrados = acoesFiltrados;
    }
}
